#ifndef THREAD_POOL_H
#define THREAD_POOL_H

#include <memory>

namespace sh
{
class ThreadPoolData;
class Runnable;
/**
 * 线程池简单封装
 *
 * @author: haitao.lin
 */
//TODO: 运行过程中动态扩展/收缩线程数
class ThreadPool
{
public:
    explicit ThreadPool();
    virtual ~ThreadPool();

    /**
     * 任务放入线程池执行，放入后不代表立即开始，如果当前没有线程空闲，则会等待
     * priority 表示当前加入的任务的优先级，priority 越大，表示优先级越高，优先级相等，则按照加入顺序执行
     */
    void start(Runnable *runnable, int priority = 0);

    /**
     * 清除任务队列，正在执行的线程还是会执行直到结束
     */
    void clear();

    /**
     * 设置/获取最大线程数
     */
    void setMaxThreadCount(int max_thread_count);
    int maxThreadCount();

private:
    std::unique_ptr<ThreadPoolData> data_;
};
}

#endif //THREAD_POOL_H
